package com.gtw.state;

/**
 * 当一个对象的行为取决于一个或多个动态变化的属性,在与外部事件产生互动时，其内部状态就会改变，从而使得系统的行为也随之发生变化
 * 抽象状态角色中声明一个环境角色,并提供所有与状态有关的行为,由各个实现类实现
 * 具体状态有两个职责:处理本状态必须完成的任务,决定是否过度到其他状态
 * 环境角色有两个不成文规定:1.定义状态(状态为静态常量);2.行为委托,具有状态抽象角色定义的所有行为,具体执行使用委托
 * 优点:
 *      避免过多的if...else,减少程序复杂性
 * 缺点:
 *      状态多的话,子类会很多
 * 使用场景:
 *      1.行为随状态改变而改变的场景,如权限设计,不同人状态不同即使执行相同操作行为结果也不同
 *      2.条件判断语句的替代者,通过扩展子类实现了条件的判断处理
 * 注意事项:
 *      在行为受状态约束的情况下使用状态模式,对象状态最好不超过5个
 */
public abstract class State {
    /**
     * 抽象角色中声明一个环境角色,并提供所有状态的行为,由各个实现类实现
     */
    protected Context context;

    //设置环境角色
    public void setContext(Context context) {
        this.context = context;
    }

    //声明各个行为
    public abstract void handle1();

    public abstract void handle2();
}
